$(function () {
    // 给父导航菜单绑定相点击事件
    $("#nav-list").on('click', '.parentNav', function () {
        // 点击可展示子导航级内容
        // 再次点击隐藏子导航内容
        $(this).nextUntil(".parentNav").toggle();
    })

    // 初始化页面
    init()

    // 打开笔记
    openNote()

    // 切换头部工具栏展示状态
    showTab()
})

// 全局变量
// 编辑器对象
let CHERRY;
// 当前正在编辑的笔记 id
let NID;

init = function () {
    // 登录第一个用户
    $.ajax({
        url: '/note/login/',
        method: 'GET',
    })

    // 刷新目录树
    $.ajax({
        // 获取当前用户目录树数据
        url: '/note/tree/user/1/',
        method: "GET",
        success: res => {
            // 对目录列表遍历
            for (dir of res) {

                // 生成每一个目录的html
                li_str = '<li class="item">\
                    <div class="parentNav">\
                        <span>'+ dir.dir.title + '</span>\
                    </div><ul class="subNav">';

                // 对目录下的笔记遍历
                for (note of dir.notes) {
                    li_str += '<li nid="' + note.id + '"><a>' + note.title + '</a></li>';
                }

                li_str += '</ul></li>';
                $('#nav-list').append(li_str);
            }
        }
    })

    // 初始化编辑器
    CHERRY = new Cherry({

        id: 'markdown',

        // 引擎
        engine: {
            // 内置语法配置
            syntax: {
                codeBlock: {
                    // theme: 'light',
                    wrap: false, // 超出长度是否换行，false则显示滚动条
                    lineNumber: true, // 默认显示行号
                    indentedCodeBlock: true,
                },

            },
        },

        // 工具栏
        toolbars: {
            theme: 'light',
            toolbar: [
                'switchModel', '|', 'bold', 'italic', 'strikethrough', '|', 'color', 'header', '|', 'togglePreview', 'list', { insert: ['image', 'audio', 'video', 'link', 'hr', 'br', 'code', 'formula', 'toc', 'table', 'pdf', 'word'], }, 'graph', 'settings',
            ],
        },
    });
    $('.cherry-toolbar').hide();
}

// 笔记操作
openNote = function () {
    // 打开笔记
    $('#nav-list').on("click", ".item ul li", function () {
        NID = $(this).attr('nid')
        $.ajax({
            url: '/note/' + NID,
            method: 'GET',
            success: res => {
                let content = res.content;
                CHERRY.setValue("# " + res.title + "\n\n---\n\n" + content)
            }
        })
    })

    // 笔记保存
    CHERRY.onChange(function () {
        let value = CHERRY.getValue();
        let title;
        let content;
        try {
            let patt = /# (.+?)\n\n---\n\n/;
            title = value.match(patt)[1];
            patt = /# .+?\n\n---\n\n/;
            content = value.replace(patt, '');
        } catch {
            alert('请不要随意更改标题格式，否则会造成数据无法保存很情况！');
            return;
        }
        $.ajax({
            url: '/note/' + NID + '/',
            method: 'PUT',
            data: {
                title: title,
                content: content
            },
            success: res => {
                $('#nav-list .item li[nid='+NID+'] a').text(res.title)
            }
        })
    })
}

// 切换头部工具栏展示状态
showTab = function () {
    $('.showtab').click(function () {
        if ($('.cherry-toolbar').is(":hidden"))
            $('.cherry-toolbar').show();
        else
            $('.cherry-toolbar').hide();
    })
}